// #ifndef DATA_SUBSCRIBER_H
// #define DATA_SUBSCRIBER_H

// #include <memory>
// #include <functional>
// #include "msg_topic.h"
// #include "data_handler.h"
// #include "global_status_manager.h"


// class DataSubscriber {
// public:
//     // 构造函数，接收节点和数据处理接口

//     // 构造函数，接收节点和数据处理接口
//     DataSubscriber(
//         const rclcpp::Node::SharedPtr& node,
//         const std::shared_ptr<DataHandler>& handler
//     );

    
//     // 初始化订阅
//     void init();

// private:
//     rclcpp::Node::SharedPtr node_; // ROS2 节点
//     rclcpp::Subscription<msg::ObstacleData>::SharedPtr lidar_data_sub_; // lds_
//     rclcpp::Subscription<msg::AiMetadata>::SharedPtr ai_data_sub_;      // abs_
//     rclcpp::Subscription<msg::AppCamdar>::SharedPtr app_data_sub_;      // ads_


//     std::shared_ptr<DataHandler> handler_; // 数据处理接口

//     // StateConfigManager* stateManager_; // 指针类型

// };

// #endif // DATA_SUBSCRIBER_H



#ifndef DATA_SUBSCRIBER_H
#define DATA_SUBSCRIBER_H

#include <memory>
#include <functional>
#include "msg_topic.h"
#include "data_handler.h"
#include "global_status_manager.h"
// #include "global_data_subpub.h"

class DataSubscriber {
public:
    // 获取单例实例
    static DataSubscriber& getInstance();

    // 初始化订阅
    void onInit(const rclcpp::Node::SharedPtr& node,  const std::shared_ptr<DataHandler>& handler );

    void Init();

    void publishCamdarData(const std::shared_ptr<msg::FusionCamdar> &msg);
    void publishCamdarStatus();


private:
    // 构造函数私有化，确保外部无法直接创建实例
    DataSubscriber() = default;

    // 禁止拷贝构造和赋值操作
    DataSubscriber(const DataSubscriber&) = delete;
    DataSubscriber& operator=(const DataSubscriber&) = delete;



private:
    rclcpp::Subscription<msg::ObstacleData>::SharedPtr lidar_data_sub_; // lds_
    rclcpp::Subscription<msg::AiMetadata>::SharedPtr ai_data_sub_;      // abs_
    rclcpp::Subscription<msg::AppCamdar>::SharedPtr app_data_sub_;      // ads_
    rclcpp::Publisher<msg::FusionCamdar>::SharedPtr camdar_data_pub_;   // cdp_

    rclcpp::Publisher<msg::FusionStatus>::SharedPtr camdar_status_pub_; // csp_
    rclcpp::TimerBase::SharedPtr timer_;


    rclcpp::Node::SharedPtr node_; // ROS2 节点
    std::shared_ptr<DataHandler> handler_; // 数据处理接口
};

#endif // DATA_SUBSCRIBER_H
